<?php

/**
 * 首页控制器
 * 用于处理前端页面的展示
 * 包括登录页、注册页等
 */

namespace app\open\controller;

use app\common\controller\BaseController;
use app\common\model\UserModel;
use core\Request;
use core\Context;

class IndexController extends BaseController
{
    /**
     * 判断有没有登录
     * 如果没有登录，跳转到登录页
     * 如果登录了，跳转到url参数指定的页面
     */
    public function index() {}

    public function login()
    {
        // 检查是否已经登录
        if (isset($_SESSION['user_id'])) {
            $this->redirect('/');
        } else {
            // 使用安全的 GET 参数获取方法
            $from = Request::getParamStrict('from', '');
            if (!empty($from)) {
                // 来源方法存在，将其存储到会话中
                $_SESSION['from'] = $from;
            }
            // 展示登录模板
            $this->render('login.php', [
                'title' => '用户登录',
                'error_msg' => '',
            ]);
        }
    }

    /**
     * 处理登录请求
     */
    public function doLogin()
    {
        // 检查请求方法
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            $this->redirect('/open/login');
        }

        // 获取表单数据
        $username = $_POST['username'] ?? '';
        $password = $_POST['password'] ?? '';

        // 验证输入
        if (empty($username) || empty($password)) {
            $this->render('login.php', [
                'title' => '用户登录',
                'error_msg' => '用户名和密码不能为空',
            ]);
            return;
        }

        // 查找用户
        $user = UserModel::findByUsername($username);
        if (!$user || !UserModel::verifyPassword($password, $user['password'])) {
            $this->render('login.php', [
                'title' => '用户登录',
                'error_msg' => '用户名或密码错误',
            ]);
            return;
        }

        // 登录成功，设置会话
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];

        // 生成并存储登录token
        $token = UserModel::updateLoginToken($user['id']);
        $_SESSION['login_token'] = $token;

        // 将用户信息存储到Context中
        Context::set('user', [
            'id' => $user['id'],
            'username' => $user['username']
        ]);

        // 重定向到首页或来源页面
        $redirectUrl = '/';
        if (isset($_SESSION['from'])) {
            $redirectUrl = '/' . $_SESSION['from'];  // 确保路径正确
            unset($_SESSION['from']);
        }
        $this->redirect($redirectUrl);
    }

    public function register()
    {
        // 展示注册模板
        $this->render('register.php', [
            'title' => '用户注册',
            'error_msg' => '',
            'success_msg' => '',
        ]);
    }

    /**
     * 处理注册请求
     */
    public function doRegister()
    {
        // 检查请求方法
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            $this->redirect('/open/register');
        }

        // 获取表单数据
        $username = $_POST['username'] ?? '';
        $password = $_POST['password'] ?? '';
        $confirmPassword = $_POST['confirm_password'] ?? '';

        // 验证输入
        if (empty($username) || empty($password) || empty($confirmPassword)) {
            $this->render('register.php', [
                'title' => '用户注册',
                'error_msg' => '所有字段都不能为空',
                'success_msg' => '',
            ]);
            return;
        }

        if ($password !== $confirmPassword) {
            $this->render('register.php', [
                'title' => '用户注册',
                'error_msg' => '两次输入的密码不一致',
                'success_msg' => '',
            ]);
            return;
        }

        // 创建用户
        $userId = UserModel::createUser($username, $password);
        if (!$userId) {
            $this->render('register.php', [
                'title' => '用户注册',
                'error_msg' => '用户名已存在',
                'success_msg' => '',
            ]);
            return;
        }

        // 注册成功
        $this->render('register.php', [
            'title' => '用户注册',
            'success_msg' => '注册成功，请登录',
            'error_msg' => '',
        ]);
    }

    /**
     * 退出登录
     */
    public function logout($params=null)
    {

        // 销毁会话
        session_destroy();
        // 重定向到登录页
        $this->redirect('/open/login?from=' . $params['from']);
    }
}
